#include <bits/stdc++.h>
using namespace std;

const int N = 305;
int n, k;
int a[N][N]; // 存储输入的矩阵

int main() {
  cin >> n >> k;
  // 读取n x n的矩阵
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      cin >> a[i][j];
    }
  }

  // 使用unordered_map代替大数组，更节省内存
  unordered_map<int, int> cnt;
  cnt.reserve(k * k); // 预分配内存

  // 遍历所有可能的k x k子矩阵的起始行
  for (int i = 1; i <= n - k + 1; i++) {
    cnt.clear();
    int count = 0;

    // 计算第一个k x k子矩阵的不同数字数量
    for (int x = i; x <= i + k - 1; x++) {
      for (int y = 1; y <= k; y++) {
        if (cnt[a[x][y]]++ == 0) {
          count++;
        }
      }
    }
    cout << count << ' ';

    // 滑动窗口，计算后续k x k子矩阵的不同数字数量
    for (int y = 2; y <= n - k + 1; y++) {
      // 移除左边一列的数字
      for (int x = i; x <= i + k - 1; x++) {
        if (--cnt[a[x][y - 1]] == 0) {
          count--;
        }
      }
      // 添加右边一列的数字
      for (int x = i; x <= i + k - 1; x++) {
        if (cnt[a[x][y + k - 1]]++ == 0) {
          count++;
        }
      }
      cout << count << ' ';
    }
    cout << endl;
  }
  return 0;
}